package cn.wolfcode.wolf2w.service;

import cn.wolfcode.wolf2w.domain.Strategy;
import cn.wolfcode.wolf2w.query.StrategyQueryObject;
import cn.wolfcode.wolf2w.util.StrategyStatisVO;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 服务接口
 */
public interface IStrategyService {

    /**
     * 增加
     */
    void insert(Strategy strategy);

    /**
     * 删除
     */
    void delete(String id);

    /**
     * 修改
     */
    void update(Strategy strategy);

    /**
     * 查询
     */
    Strategy selectOne(String id);

    /**
     * 查询全部
     */
    List<Strategy> selectAll();

    /**
     * 分页查询
     * @param q
     * @return
     */
    Page<Strategy> query(StrategyQueryObject q);

    /**
     * 攻略明细保存与编辑
     * @param strategy
     */
    void saveOrUpdate(Strategy strategy);

    /**
     * 通过攻略目录的id去查找攻略明细
     * @param id
     * @return
     */
    List<Strategy> queryByCatalogId(String id);

    /**
     * 通过目的地id找出点击量前三的数据
     * @param destId
     * @return
     */
    List<Strategy> queryByThree(String destId);

    List<Strategy> queryByStrategy(String destId);

    /**
     * 阅读数加一
     */
    void viewnum(Strategy strategy);

    /**
     * 获取攻略的统计对象
     * @param strategy
     * @return
     */
    StrategyStatisVO getStrategyStatisVO(Strategy strategy);

    /**
     * 设置攻略的统计对象
     * @param strategy
     * @return
     */
    void setStrategyStatisVO(Strategy strategy,StrategyStatisVO strategyStatisVO);

    /**
     * 回复数加一
     * @param strategy
     */
    void replyNum(Strategy strategy);

    /**
     * 收藏数加一
     * true 收藏成功，false 收藏失败
     * @param sid
     * @return
     */
    boolean favorNum(String sid,String userId);

    /**
     * 点赞数加一
     * true 顶成功，false 今天已经顶过了
     * @param sid
     * @param userId
     * @return
     */
    boolean strategyThumbup(String sid, String userId);

    /**
     * 对vo对象进行持久化
     * @param vo
     */
    void updateStrategyVo(StrategyStatisVO vo);

    /**
     * 通过目的地的名称查出所有的攻略
     * @param name
     * @return
     */
    List<Strategy> queryByDestName(String name);
}
